Ex_treme's blog.

TensorFlow结合mnist进行线性模型训练

2018/11/24 Share

搭建神经网络基本流程

  • 训练的数据
  • 定义节点准备接收数据
  • 定义神经层:隐藏层和预测层
  • 定义 loss 表达式
  • 选择 optimizer 使 loss 达到最小
  • 然后对所有变量进行初始化,通过 sess.run optimizer,迭代 1000 次进行学习

全局代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding: utf-8 -*-
# @Time : 18-11-24 上午9:43
# @Author : Ex_treme
# @Email : pzsyjsgldd@163.com
# @File : regression.py
# @Software: PyCharm

from mnist import input_data
from mnist import model

data = input_data.read_data_sets("MNIST_DATA", one_hot=True)
import tensorflow as tf

# create model
with tf.variable_scope("regression"):
x = tf.placeholder(tf.float32, [None, 784])
y, variables = model.regression(x)

# train
y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

saver = tf.train.Saver(variables)

# important step 对所有变量进行初始化
init = tf.initialize_all_variables()
sess = tf.Session()
# 上面定义的都没有运算,直到 sess.run 才会开始运算
sess.run(init)
# 迭代 1000 次学习,sess.run optimizer
for i in range(1000):
batch_xs, batch_ys = data.train.next_batch(100)
# training train_step 和 loss 都是由 placeholder 定义的运算,所以这里要用 feed 传入参数
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
if i % 50 == 0:
# to see the step improvement
print((sess.run(accuracy, feed_dict={x: data.test.images, y_: data.test.labels})))

运行结果:
​ 模型精确度: 0.1289
​ 模型精确度: 0.8357
​ 模型精确度: 0.8917
​ 模型精确度: 0.9037
​ 模型精确度: 0.8971
​ 模型精确度: 0.9097
​ 模型精确度: 0.9143
​ 模型精确度: 0.9049
​ 模型精确度: 0.9054
​ 模型精确度: 0.9117
​ 模型精确度: 0.9087
​ 模型精确度: 0.9022
​ 模型精确度: 0.9161
​ 模型精确度: 0.915
​ 模型精确度: 0.9164
​ 模型精确度: 0.9048
​ 模型精确度: 0.9174
​ 模型精确度: 0.9131
​ 模型精确度: 0.9047
​ 模型精确度: 0.9149
​ 模型保存路径: /home/pzs741/PycharmProjects/tensorflow-minist-master/mnist/data/regression_model

主要步骤解释

  • 导包及数据
    ​ from mnist import input_data
    ​ from mnist import model

      data = input_data.read_data_sets("MNIST_DATA", one_hot=True)
      import tensorflow as tf
    
  • 定义线性模型
    ​ with tf.variable_scope(“regression”):
    ​ x = tf.placeholder(tf.float32, [None, 784])
    ​ y, variables = model.regression(x)

  • 定义交叉熵和预测值

image

    y_ = tf.placeholder("float", [None, 10])
    cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

  • 然后对所有变量进行初始化,通过 sess.run optimizer,迭代 1000 次进行学习
    ​ # important step 对所有变量进行初始化
    ​ init = tf.initialize_all_variables()
    ​ sess = tf.Session()
    ​ # 上面定义的都没有运算,直到 sess.run 才会开始运算
    ​ sess.run(init)
    ​ # 迭代 1000 次学习,sess.run optimizer
    ​ for i in range(1000):
    ​ batch_xs, batch_ys = data.train.next_batch(100)
    ​ # training train_step 和 loss 都是由 placeholder 定义的运算,所以这里要用 feed 传入参数
    ​ sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    ​ if i % 50 == 0:
    ​ # to see the step improvement
    ​ print((sess.run(accuracy, feed_dict={x: data.test.images, y_: data.test.labels})))
CATALOG
  1. 1. 搭建神经网络基本流程
  2. 2. 全局代码
  3. 3. 主要步骤解释